package cn.yym.test.utils;

import java.util.List;

/**
 * 1. 封装分页的所有的数据, 泛型的目的是做到具有通用性
 * 2. 编写的时候结合着页面，分析要有那些数据
 * 3. 生成 set  get 方法，然后一个个排查，有些set不能要，有get不能要；
 *     然后还需要改写 set 和 get 中的内容。
 * @param <T>
 */
public class PageBean<T> {

    // PageBean<User> pageBean = new PageBean<>();

    // data表示表格中每页的数据
    private List<T> datas;

    //每页的数据, 默认值是每页10条数据
    private int pageSize = 10;

    //满足条件的总数据量
    private int total;

    // 当前第几页
    private int currentPage = 1;

    // 总页数
    private int totalPage;

    // 是否有下一页
    private boolean hasNext;

    //是否有上一页
    private boolean hasPre;

    // 因为前端页面要展示，所以get方法要
    public List<T> getDatas() {
        return datas;
    }

    // 从数据库查的数据需要设置进来，所以该方法要
    public void setDatas(List<T> datas) {
        this.datas = datas;
    }

    public int getPageSize() {
        return pageSize;
    }

    //
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        if(currentPage < 0) {  // 如果用户传入值小于0， 直接给第一页
            this.currentPage = 1;
        // 如果用户给定的需要查询的当前页,大于总页数，例如总共5页，却给了第10,
            // 那么就给最后一页
        }else if(currentPage > this.getTotalPage()) {
            this.currentPage = this.getTotalPage();
        } else {
            this.currentPage = currentPage;
        }
    }

    /**
     * 因为页面要拿到总页数, get方法必须要.
     * 总页数是根据总的数据量 和 每页的数据计算而来的。
    */
    public int getTotalPage() {
        return (this.getTotal() + this.getPageSize() - 1) / this.getPageSize();
    }

    // 总的页数，是根据数据计算出来的，而不是让其设置的，该方法不能要
    /**
    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }
     */

    public boolean isHasNext() {
        return this.getCurrentPage() == this.getTotalPage() ? false : true;
    }

    // 是否有下一页, 不应该判断
    /**
    public void setHasNext(boolean hasNext) {
        this.hasNext = hasNext;
    }
    */

    public boolean isHasPre() {
        return 1 == this.getCurrentPage() ? false : true;
    }

    // 是否有上一页, 也应该是算出来的
    /**
    public void setHasPre(boolean hasPre) {
        this.hasPre = hasPre;
    }
     */
    public int getTotal() {
        return total;
    }

    // 数据库查出的最大数据量
    public void setTotal(int total) {
        this.total = total;
    }
}
